/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Control;

import Control.exceptions.NonexistentEntityException;
import java.io.Serializable;
import javax.persistence.Query;
import javax.persistence.EntityNotFoundException;
import Entidades.Repuesto;
import Entidades.Compra;
import Entidades.Lineacompra;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;

/**
 *
 * @author luksCastro
 */
public class LineacompraJpaController implements Serializable {

    public LineacompraJpaController(EntityManagerFactory emf) {
        this.emf = emf;
    }
    private EntityManagerFactory emf = null;

    public EntityManager getEntityManager() {
        return emf.createEntityManager();
    }

    public void create(Lineacompra lineacompra) {
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            Repuesto idRepuesto = lineacompra.getIdRepuesto();
            if (idRepuesto != null) {
                idRepuesto = em.getReference(idRepuesto.getClass(), idRepuesto.getIdRepuesto());
                lineacompra.setIdRepuesto(idRepuesto);
            }
            Compra idCompra = lineacompra.getIdCompra();
            if (idCompra != null) {
                idCompra = em.getReference(idCompra.getClass(), idCompra.getIdCompra());
                lineacompra.setIdCompra(idCompra);
            }
            em.persist(lineacompra);
            if (idRepuesto != null) {
                idRepuesto.getLineacompraList().add(lineacompra);
                idRepuesto = em.merge(idRepuesto);
            }
            if (idCompra != null) {
                idCompra.getLineacompraList().add(lineacompra);
                idCompra = em.merge(idCompra);
            }
            em.getTransaction().commit();
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public void edit(Lineacompra lineacompra) throws NonexistentEntityException, Exception {
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            Lineacompra persistentLineacompra = em.find(Lineacompra.class, lineacompra.getIdLineaCompra());
            Repuesto idRepuestoOld = persistentLineacompra.getIdRepuesto();
            Repuesto idRepuestoNew = lineacompra.getIdRepuesto();
            Compra idCompraOld = persistentLineacompra.getIdCompra();
            Compra idCompraNew = lineacompra.getIdCompra();
            if (idRepuestoNew != null) {
                idRepuestoNew = em.getReference(idRepuestoNew.getClass(), idRepuestoNew.getIdRepuesto());
                lineacompra.setIdRepuesto(idRepuestoNew);
            }
            if (idCompraNew != null) {
                idCompraNew = em.getReference(idCompraNew.getClass(), idCompraNew.getIdCompra());
                lineacompra.setIdCompra(idCompraNew);
            }
            lineacompra = em.merge(lineacompra);
            if (idRepuestoOld != null && !idRepuestoOld.equals(idRepuestoNew)) {
                idRepuestoOld.getLineacompraList().remove(lineacompra);
                idRepuestoOld = em.merge(idRepuestoOld);
            }
            if (idRepuestoNew != null && !idRepuestoNew.equals(idRepuestoOld)) {
                idRepuestoNew.getLineacompraList().add(lineacompra);
                idRepuestoNew = em.merge(idRepuestoNew);
            }
            if (idCompraOld != null && !idCompraOld.equals(idCompraNew)) {
                idCompraOld.getLineacompraList().remove(lineacompra);
                idCompraOld = em.merge(idCompraOld);
            }
            if (idCompraNew != null && !idCompraNew.equals(idCompraOld)) {
                idCompraNew.getLineacompraList().add(lineacompra);
                idCompraNew = em.merge(idCompraNew);
            }
            em.getTransaction().commit();
        } catch (Exception ex) {
            String msg = ex.getLocalizedMessage();
            if (msg == null || msg.length() == 0) {
                Integer id = lineacompra.getIdLineaCompra();
                if (findLineacompra(id) == null) {
                    throw new NonexistentEntityException("The lineacompra with id " + id + " no longer exists.");
                }
            }
            throw ex;
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public void destroy(Integer id) throws NonexistentEntityException {
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            Lineacompra lineacompra;
            try {
                lineacompra = em.getReference(Lineacompra.class, id);
                lineacompra.getIdLineaCompra();
            } catch (EntityNotFoundException enfe) {
                throw new NonexistentEntityException("The lineacompra with id " + id + " no longer exists.", enfe);
            }
            Repuesto idRepuesto = lineacompra.getIdRepuesto();
            if (idRepuesto != null) {
                idRepuesto.getLineacompraList().remove(lineacompra);
                idRepuesto = em.merge(idRepuesto);
            }
            Compra idCompra = lineacompra.getIdCompra();
            if (idCompra != null) {
                idCompra.getLineacompraList().remove(lineacompra);
                idCompra = em.merge(idCompra);
            }
            em.remove(lineacompra);
            em.getTransaction().commit();
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public List<Lineacompra> findLineacompraEntities() {
        return findLineacompraEntities(true, -1, -1);
    }

    public List<Lineacompra> findLineacompraEntities(int maxResults, int firstResult) {
        return findLineacompraEntities(false, maxResults, firstResult);
    }

    private List<Lineacompra> findLineacompraEntities(boolean all, int maxResults, int firstResult) {
        EntityManager em = getEntityManager();
        try {
            Query q = em.createQuery("select object(o) from Lineacompra as o");
            if (!all) {
                q.setMaxResults(maxResults);
                q.setFirstResult(firstResult);
            }
            return q.getResultList();
        } finally {
            em.close();
        }
    }

    public Lineacompra findLineacompra(Integer id) {
        EntityManager em = getEntityManager();
        try {
            return em.find(Lineacompra.class, id);
        } finally {
            em.close();
        }
    }

    public int getLineacompraCount() {
        EntityManager em = getEntityManager();
        try {
            Query q = em.createQuery("select count(o) from Lineacompra as o");
            return ((Long) q.getSingleResult()).intValue();
        } finally {
            em.close();
        }
    }
    
}
